package mercado.ab;



import Beans.Itens;
import Beans.Produto;
import DataBase.DAO;


import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import java.util.logging.Level;
import java.util.logging.Logger;


public class Prod extends DAO {




    /*Este método faz uma consulta no BD utilizando como argmento uma String
    "busca", que pode ser o nome ou código do produto. Ele retorna um objeto Produto com
    todos os atributos configurados conforme os dados estejam no BD*/
    public Produto busca(String busca) throws Exception {
        Conectar();
        String SQL = "SELECT * FROM produto,itens WHERE  cod_prod=? or nome_prod=?;";
        PreparedStatement pst = con.prepareStatement(SQL);
        pst.setString(1, busca);
        pstmt.setString(2, busca);
        rs = pstmt.executeQuery();
        Produto pr = null;
        if (rs.next()) {
           //pr = new Produto();
            //pr.setRef_prod(rs.getString("cod_prod"));
            //pr.setNome(rs.getString("nome_prod"));
            //pr.setPreco(rs.getFloat("preco"));
            //pr.setQuantidade(rs.getInt("quantidade"));
            //pr.setDataBD(rs.getString("data"));

        }
        Desconectar();
        return pr;

    }

    public String AtualizarTabela(String codigo, String nome, String quantidade, String preco, String mesa, String hora, String data, String cod_funcionario,String pedido) throws SQLException {
        Conectar();
        String SQL = "insert into tbvenda (codigo,nome,quantidade,preco,mesa,status,hora,data,cod_funcionario,pedido)values(?,?,?,?,?,?,?,?,?,?) ";
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, codigo);
        System.out.println(codigo);
        pstmt.setString(2, nome);
        System.out.println(nome);
        pstmt.setString(3, quantidade);
        System.out.println(quantidade);
        pstmt.setString(4, preco);
        System.out.println(preco);
        pstmt.setString(5, mesa);
        System.out.println(mesa);
        pstmt.setString(6, "ATIVO");
        pstmt.setString(7, hora);
        System.out.println(hora);
        pstmt.setString(8, data);
        System.out.println(data);
        pstmt.setString(9, cod_funcionario);
        System.out.println(cod_funcionario);
        pstmt.setString(10,pedido);
        System.out.println(pedido);
        pstmt.executeUpdate();
        return SQL;
    }

    /*Este método faz uma consulta no BD utilizando o argumento NomeFunc
    e tem como retorno um objeto Funcionário com os atributos nome e nivel(hierarquia)
    preenchidos*/  

    private String obterData() {
        Date d = new Date();
        Locale loc = new Locale("pt", "BR");
        Calendar c = Calendar.getInstance(loc);

        DateFormat df = DateFormat.getDateInstance();
        d = c.getTime();
        return df.format(d);

    }

    public int getTotalprod() {
        try{
        Conectar();
        String SQL = ("select count(*) from venda; ");
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        int quant = 0;
        if (rs.next()) {
            quant = rs.getInt("count");
        }
        Desconectar();
        return quant;
    }catch(Exception ex){
            System.out.println("Exceção getTotalprod"+ex.getMessage());
        return 0;
    }
    }

    public double getQuantProd(String nome) {
        try{
        Conectar();
        String SQL = ("select quantidade from produto where codigo=?");
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1,nome);
        rs = pstmt.executeQuery();
        
        double quant = 0.0;
        if (rs.next()) {
              System.out.println("aqui no metodo getQuantProd ");
              System.out.println(rs.getDouble("quantidade"));
              quant = rs.getDouble("quantidade");
        }
        Desconectar();
        return quant;
     }catch(Exception ex){
            System.out.println("Execeção getQuantProd  "+ex.getMessage());
            return 0.0;
        }
    }
    public String[] getNomes()  {
       try{
        Conectar();
        String SQL = ("select count(*) from produto_estoque; ");
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        int quant = 0;
        if (rs.next()) {
            quant = rs.getInt("count");
        }
        String[] nomes = new String[quant];
        int i = 0;
        rs = null;
        SQL = ("select nome_prod from produto_estoque order by cod_prod;");
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();

        while (rs.next()) {
            nomes[i] = rs.getString("nome_prod");
            i++;
        }
        Desconectar();
        return nomes;
       }catch(Exception ex){
            System.out.println("Execeção getNomes"+ex.getMessage());
            return new String[1];
        }
    }

   public boolean validarOk(String nome, String senha, String funcao)  {
      //vai no banco copara o nome e a senha e diz se é valido ou não
        try {

             Conectar();
             System.out.println("ok conectou");
             String SQL = ("SELECT nome, senha, nivel FROM tblogin WHERE nome=?");
            pstmt = con.prepareStatement(SQL);
             System.out.println("SELECT nome, senha, nivel FROM tblogin WHERE nome= "+nome);

            pstmt.setString(1, nome);

            rs =  pstmt.executeQuery();
             System.out.println("ok entrou");
             Desconectar();

           //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            if(rs.next()) {
                String pw = rs.getString("senha");// pega a string do campo senha no banco
                 String pd = rs.getString("nivel");
                 System.out.println(pd);
                if (pw.equals(senha) & pd.equals(funcao)){
                System.out.println("validou");
                 return true;}
            }
            return false;

        } catch (Exception se) {
             System.out.println("falso no banco/ validar ok");
            return false;
        }
    }

    public List<Produto> ListarTodos()  {
        try{
        Conectar();
        String SQL = "SELECT * FROM produto_estoque order by cod_prod;";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Produto p = null;
        List<Produto> ListaProd = new ArrayList<Produto>();
        while (rs.next()) {
            p = new Produto();
           // p.setRef_prod(rs.getString("cod_prod"));
            //p.setNome(rs.getString("nome_prod"));
           //p.setPreco(rs.getFloat("preco"));
            //p.setQuantidade(rs.getInt("quantidade"));
            //p.setDataBD(rs.getString("data"));
            ListaProd.add(p);
        }
        Desconectar();
        return ListaProd;
        }catch(Exception ex){
            System.out.println("Execeção Listar Todos"+ex.getMessage());
            return  new ArrayList<Produto>() ;
        }


    }
  /* public List<Prod> ListaAtualizar(String codigo,String nome,String quantidade,String preco,String mesa,String hora,String data,String cod_funcionario);
      try{
      Conectar();
      String SQL = "select * form tbvenda(codigo,nome,quantidade,preco,mesa,status,hora,data,cod_funcionario)values(?,?,?,?,?,?,?,?,?) ";
      pstmt = con.prepareStatement(SQL);
      rs = pstmt.executeQuery();
      Produto p = null;
        List<Produto> ListaAtualizacao = new ArrayList<Produto>();
        while (rs.next()) {
            p = new Produto();
            p.setCodigo(rs.getString("codigo"));
            System.out.println("dentro do sql venda");
            p.setNome(rs.getString("nome"));
            p.setQuantidade(rs.getInt("quantidade"));    
            p.setPreco(rs.getFloat("preco"));
            

            ListaAtualizacao.add(p);
        }
        Desconectar();
        return ListaAtualizacao;
        }catch(Exception ex){
            System.out.println("Execeção Listar Venda"   +ex.getMessage());
            return  new ArrayList<Produto>() ;
        
      
    
    
    
    
    
    
    
}
    */
    public void limparVenda() throws Exception {
        try{
        Conectar();
        String SQL = "delete from tbvenda; ";
        pstmt = con.prepareStatement(SQL);
        pstmt.executeUpdate();
        Desconectar();
        }catch(Exception ex){
            System.out.println("Exceção apagando dados tbl Venda ");
        }

    }

    public void remProd(String nomProd)  {
        try{
        Conectar();
        String SQL = ("delete from produto_estoque where nome_prod=?;");
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, nomProd);
        pstmt.executeUpdate();
        Desconectar();
        }catch(Exception ex){
            System.out.println("Exceção remover produto"+ex.getLocalizedMessage());
        }
    }

    public void remFunc(String nomFunc) {
        try {
            Conectar();
            String SQL = ("delete from funcionarioest where nome=?;");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, nomFunc);
            pstmt.executeUpdate();
            Desconectar();
        } catch (Exception ex) {
            System.out.println("Exceção remover Funcionario" + ex.getMessage());
        }
    }

    public boolean vendaTemp(String cod_venda,String codigo,String quantidade) {
        try {
            Conectar();
            String SQL = "insert into itens (cod_venda,cod_produto,quantidade,status)values(?,?,?,?);";
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, cod_venda);
            pstmt.setString(2, codigo);
            pstmt.setString(3, quantidade);
            pstmt.setString(4,"ATIVO");
           // pstmt.setString(3, p.getPreco()+"");
            //pstmt.setString(5, p.getQuantidade() * p.getPreco());
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

     public boolean vendaTemp(Itens i) {
        try {
            Conectar();
            String SQL = "insert into tbvenda values(?,?,?,?,?);";
            pstmt = con.prepareStatement(SQL);
            //pstmt.setString(1, p.getRef_prod());
            //pstmt.setString(2, p.getNome());
            //pstmt.setInt(3, i.getQuantidade());
            //pstmt.setFloat(4, p.getPreco());
           // pstmt.setString(5, i.getQuantidade() * i.getPreco());
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }
    public boolean venda(Produto p) {
        try {
            Conectar();
            String SQL = "select quantidade from produto_estoque where cod_prod=?;";
            pstmt = con.prepareStatement(SQL);
            //pstmt.setString(1, p. getRef_prod());
            rs = pstmt.executeQuery();
            int quant = 0;
            if (rs.next()) {
            //    if (p.getQuantidade() <= rs.getInt("quantidade") & rs.getInt("quantidade") > 0) {
            //        quant = rs.getInt("quantidade");
              //  } else {
                //    return false;
               // }
            }
            //quant -= p.getQuantidade();

            SQL = "update produto_estoque set quantidade=? where cod_prod=?;";
            pstmt = con.prepareStatement(SQL);
            pstmt.setInt(1, quant);
            //pstmt.setString(2, p. getRef_prod());
            pstmt.executeUpdate();
            Desconectar();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }
     public boolean quantInserir(String cod, String quant){
        try {
            Conectar();
            String SQL = "SELECT quantidade from tbproduto WHERE ref_prod=?";
            pstmt = con.prepareStatement(SQL);
             //transforma string em int p/ passar p/ banco
            pstmt.setString(1,(cod));
            rs =  pstmt.executeQuery();
            
            int var = 0 ;
            
            if (rs.next()){
            var = rs.getInt("quantidade");
                System.out.println(var);
            }
             var += Integer.parseInt(quant);
                   System.out.println(var);
             SQL = "update tbproduto set quantidade=? where ref_prod=?";
             pstmt = con.prepareStatement(SQL);
             pstmt.setInt(1, var);
             pstmt.setString(2, (cod));
             pstmt.executeUpdate();
            

            Desconectar();

            return true;

        } catch (Exception ex) {

            Logger.getLogger(Prod.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
     
    public Produto consultarBd(String cod) throws Exception {

        try {

            Conectar();
            String SQL = ("SELECT * FROM produto WHERE codigo=?");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, (cod));
            rs =  pstmt.executeQuery();
            
            
             System.out.println("consultou tabela produto");
           //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            Produto pd = null;
            if(rs.next()) {
             pd = new Produto();
                pd.setCodigo(rs.getString("codigo"));
                pd.setNome(rs.getString("nome"));
                pd.setStatus(rs.getString("status"));
                pd.setTipo(rs.getString("tipo"));
 
                System.out.println("dentro");
            }
            

            Desconectar();
            return pd;//retorna o objeto que sera passado p/ botão consultar

        } catch (SQLException se) {
            return null;
        }
    }
    
    public Itens consultarTabela_itens(String cod) throws Exception {

        try {

            Conectar();
            String SQL = ("SELECT * FROM tabela_itens WHERE codigo=?");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, (cod));
            rs =  pstmt.executeQuery();
            
            
             System.out.println("entrou na tabela Itens");
           //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            //tbItens pd = null;
            if(rs.next()) {
             //pd = new tbItens();
               // pd.setCodigo(rs.getInt("codigo"));
               // pd.setCod_venda(rs.getInt("cod_venda"));
               // pd.setCod_produto(rs.getInt("cod_produto"));
               // pd.setQuantidade(rs.getFloat("quantidade"));
               // pd.setPreco(rs.getFloat("preco"));
               // pd.setStatus(rs.getString("status"));
                System.out.println("dentro");
            }
            

            Desconectar();
            //return pd;//retorna o objeto que sera passado p/ botão consultar
            return null;
        } catch (SQLException se) {
            return null;
        }
    }
    
    
    
  
    public boolean atualizarInserir(String cod, String email,String telefone_fixo, String telefone_celular){
        try {
            Conectar();
            String SQL = "SELECT email,telefone_fixo,telefone_celular from tbclientes WHERE nome=?";
            pstmt = con.prepareStatement(SQL);
             //transforma string em int p/ passar p/ banco
            pstmt.setString(1,(cod));
          
            rs =  pstmt.executeQuery();
            
            if (rs.next()){
            SQL = "update tbclientes set email=?,telefone_fixo=?,telefone_celular=? where nome=?";
             pstmt = con.prepareStatement(SQL);
             pstmt.setString(1, (email));
             pstmt.setString(2, (telefone_fixo));
             pstmt.setString(3, (telefone_celular));
             pstmt.setString(4, (cod));
             pstmt.executeUpdate();
            }

            Desconectar();

            return true;

        } catch (Exception ex) {

            Logger.getLogger(Prod.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
     
        public List<Produto> ListarVendas() throws Exception {

      


        Conectar();
        String SQL = "SELECT * FROM produto ";
        pstmt = con.prepareStatement(SQL);
        rs = pstmt.executeQuery();
        Produto p = null;
        List<Produto> ListaProd = new ArrayList<Produto>();
        while (rs.next()) {

            p = new Produto();
            p.setRegistro(rs.getInt("registro"));
            p.setNome(rs.getString("nome"));

            ListaProd.add(p);
        }
        Desconectar();
        return ListaProd;

    }

        public Produto consultarTbVenda(String cod) throws Exception {

        try {

            Conectar();
            String SQL = ("SELECT * FROM tbvenda WHERE mesa=?");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, (cod));
            rs =  pstmt.executeQuery();
            System.out.println("consultou tabela tbvenda");
           //cria um objeto AbaCadastro e configura os dados p/ inserir no objeto AbaCadastro
            Produto pd = null;
            if(rs.next()) {
             pd = new Produto();
                pd.setCodigo(rs.getString("codigo"));
                pd.setNome(rs.getString("nome"));
                pd.setStatus(rs.getString("status"));
                pd.setTipo(rs.getString("tipo"));
 
                System.out.println("dentro");
            }
            

            Desconectar();
            return pd;//retorna o objeto que sera passado p/ botão consultar

        } catch (SQLException se) {
            return null;
        }
    }
     /* public String getQuantProd(String nome) {
        try {
            Conectar();
            String SQL = ("select quantidade from itens where codigo=?; ");
            pstmt = con.prepareStatement(SQL);
            pstmt.setString(1, nome);
            rs = pstmt.executeQuery();
            String quant = "";
            
            if (rs.next()) {
                System.out.println("aqui no metodo getQuantProd ");
                quant += rs.getString("quantidade");
            }
            Desconectar();
            return quant;
        } catch (Exception ex) {
            System.out.println("Execeção getQuantProd" + ex.getMessage());
            return ex.getMessage();
        }
    } */  
   public List<Produto> ListarVenda(String mesa)  {
        Conectar();
       try{
            String SQL ;

        SQL = "SELECT * FROM tbvenda where mesa = ?";
        pstmt = con.prepareStatement(SQL);
        pstmt.setString(1, mesa);
        rs = pstmt.executeQuery();
        
        Produto p = null;
        List<Produto> ListaVenda = new ArrayList<Produto>();
        while (rs.next()) {
            p = new Produto();
            p.setCodigo(rs.getString("codigo"));
            System.out.println("dentro do sql venda");
            p.setNome(rs.getString("nome"));
            p.setQuantidade(rs.getInt("quantidade"));    
            p.setPreco(rs.getFloat("preco"));
            

            ListaVenda.add(p);
        }
        Desconectar();
        return ListaVenda;
        }catch(Exception ex){
            System.out.println("Exceção Listar Venda  "   +ex.getMessage());
            return  null ;
        }
    }

     
}




